/**
 * Classe Lista de Epitopo Geral
 *
 * Responsavel por gerenciar e armazenar todos os epitopos geral em uma lista
 *
 */
package epibot.testeProteinas;

import epibot.EstruturasBiologicas.Epitopo;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Iterator;

/**
 *
 * @author Rafael Tosta
 */
public class ListaEpitopoGeral {

    /**
     * Lista de EpitoposGeral
     */
    private ArrayList<EpitopoGeral> listaEp;
    private EpitopoGeral es;

    /**
     * Construtor
     */
    public ListaEpitopoGeral() {
        this.listaEp = new ArrayList<EpitopoGeral>();
    }

    /**
     * Adiciona um EpitopoGeral na lista Caso já tenha um EpitopoGeral igual na
     * lista o mesmo não é add, pois só pode possuir apenas um epitopo
     * armazenado
     *
     * @param ep EpitopoGeral
     */
    public void add(Epitopo ep) {
        if (this.existEpitopo(ep) == false) {
            es = new EpitopoGeral(ep);
            this.listaEp.add(es);
        }
    }

    /**
     * Obtém o nome do epitopo
     *
     * @return Nome do epitopo
     */
    public String getNomeEpitopo() {
        if (!listaEp.isEmpty()) {
            return this.listaEp.get(0).getNomeEpitopo();
        }
        return "";
    }

    /**
     * Verifica se um epitopo já esta na lista
     *
     * @param ep Epitopo
     * @return true se já existe e false caso contrário
     */
    private boolean existEpitopo(Epitopo ep) {
        for (Iterator iterator = listaEp.iterator(); iterator.hasNext();) {
            EpitopoGeral epg = (EpitopoGeral) iterator.next();
            if (epg.getProteina().getSite().equals(ep.getProteina().getSite())) {
                return true;
            }
        }
        return false;
    }

    /**
     * Calcula o score global do epitodo em relação a todos os preditores
     *
     * @return
     */
    private double scoreGlobal() {
        double rank = 0.0;
        for (Iterator iterator = listaEp.iterator(); iterator.hasNext();) {
            EpitopoGeral epg = (EpitopoGeral) iterator.next();
            rank = rank + epg.getScoreGlobalLocal();
        }
        DecimalFormat formatador = new DecimalFormat("###0.000");
        String rankG = formatador.format(rank);
        rankG = rankG.replace(',', '.');

        return Double.parseDouble(rankG);
    }

    /**
     * Cria um novo objeto do tipo EpitopoGeral a partir do primeiro da lista
     *
     * @return EpitopoGeral
     */
    public EpitopoGeral getEpitopoGeral() {
        EpitopoGeral epg = new EpitopoGeral(this.listaEp.get(0), this.scoreGlobal());
        return epg;
    }
}
